package com.niit.scala

import scala.collection.MapView

/**
 * Date:2025/4/8
 * Author：Ys
 * Description:
 */
object Base09 {

  def main(args: Array[String]): Unit = {

    /*
     过滤：filter 过滤出符合一定条件的数据
      步骤： 1.利用 to 的方式 生成 1-9列表
            2.过滤列表中能够被2整除的数据
     */
      var list1 = (1 to 9).toList
      val ls1: List[Int] = list1.filter(_ % 2 == 0)// _ :表示列表中的每一个元素。 filter返回出一个新列表
      println(ls1)

    /*
     排序：
        sorted:对集合元素进行默认排序   升序
        sortBy:对集合按照指定字段进行排序
        sortWith:对集合按照指定条件进行排序
     */
    var list2 = List(3,1,2,4,5,6,9,8,7)
    val ls2: List[Int] = list2.sorted
    println(ls2.reverse) // reverse:反转

    //sortBy:对集合按照指定字段进行排序
    var list3 = List("01 hadoop","02 flume","03 java","04 kafka")
    //按照字母的顺序进行排序
    /*
      "01 hadoop" ==>split(" ") ==> Array("01","hadoop")==>(1)==>hadoop
     */
    var ls3 = list3.sortBy(_.split(" ")(1))
    println(ls3)

    //sortWith:对集合按照指定条件进行排序
    var list4 = List(2,3,1,4,5)
    //自定排序 对list5进行降序
    val ls4: List[Int] = list4.sortWith( (x, y) => x > y  )
    println(ls4)
    /*
     此时 x 和 y 都是表示列表中的每一个元素，并且x和y也是一个固定的位置。
     那么这样大家就会习惯性的找一个东西代替， 第一个_ 表示 x 第二个_ 表示 y
     */
    val ls5: List[Int] = list4.sortWith( _ > _ )
    println(ls5)

    /*
     分组： 将集合中的元素按照一定的规则进行分组 groupBy
      需求： 1.将一个班的学生按照性别进行分组
            2.根据性别统计人数
    * */
    var list5 = List("张三"->"男","李四"->"男","王五"->"女","赵六"->"男","钱七"->"女")
    //按照性别进行分组
    val ls6: Map[String, List[(String, String)]] = list5.groupBy(_._2)
    //==> Map( "男"-> List(("张三","男"),("李四","男"),("赵六","男")),
    //                    "女"->List(("王五","女"),("钱七","女")))
    //根据性别统计人数 -- > 根据 key 获得 value(列表  --》 获得列表的长度)
    //                                x不能写成_ 因为后面出现两次
    val ls7: Map[String, Int] = ls6.map(x => (x._1, x._2.size))   // x==> "男"-> List(("张三","男"),("李四","男"),("赵六","男")
    println(ls7)

    /*
      聚合操作： 将列表中的数据合并为一个值
      reduce:用来对集合元素进行聚合计算
      fold:用来对集合元素进行折叠计算
     */
    var list6 = List(1,2,3,4,5,6,7,8,9)
    val res: Int = list6.reduce(_ + _)
    println(res)

    /*
     fold折叠计算： 和reduce一样，但是多了一个初始值参数
     */
    //需求：定义一个列表 1-10,假设初始值为100，使用fold方法计算所有元素的和
    var list7 = (1 to 10).toList
    val i: Int = list7.fold(100)(_ + _)
    println(i)



  }

}
